package com.tracbds.core.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * Redis消息配置管理服务
 * 支持动态切换消息队列方式
 * @author lingx.com
 */
@Component
public class RedisMessageConfigService {
    
    private static final Logger logger = LoggerFactory.getLogger(RedisMessageConfigService.class);
    
    @Value("${tracbds.redis.message.type:list}")
    private String messageType;
    
    @Value("${tracbds.redis.message.channel:vehicle_location_data}")
    private String messageChannel;
    
    @Value("${tracbds.redis.message.queue:vehicle_location_data}")
    private String messageQueue;
    
    @Autowired
    private RedisMessageService redisMessageService;
    
    @PostConstruct
    public void init() {
        logger.info("=== Redis消息队列配置 ===");
        logger.info("消息类型: {}", messageType);
        logger.info("消息频道: {}", messageChannel);
        logger.info("消息队列: {}", messageQueue);
        
        if ("pubsub".equalsIgnoreCase(messageType)) {
            logger.info("✅ 使用Pub/Sub方式推送消息");
        } else if ("list".equalsIgnoreCase(messageType)) {
            logger.info("✅ 使用List方式推送消息");
        } else {
            logger.warn("⚠️  未知的消息类型: {}，默认使用List方式", messageType);
        }
        
        logger.info("=== Redis消息队列配置完成 ===");
    }
    
    /**
     * 获取当前消息类型
     * @return 消息类型
     */
    public String getMessageType() {
        return messageType;
    }
    
    /**
     * 获取消息频道名称
     * @return 频道名称
     */
    public String getMessageChannel() {
        return messageChannel;
    }
    
    /**
     * 获取消息队列名称
     * @return 队列名称
     */
    public String getMessageQueue() {
        return messageQueue;
    }
    
    /**
     * 检查是否使用Pub/Sub方式
     * @return true表示使用Pub/Sub，false表示使用List
     */
    public boolean isPubSubMode() {
        return "pubsub".equalsIgnoreCase(messageType);
    }
    
    /**
     * 检查是否使用List方式
     * @return true表示使用List，false表示使用Pub/Sub
     */
    public boolean isListMode() {
        return "list".equalsIgnoreCase(messageType);
    }
    
    /**
     * 获取当前使用的消息目标名称
     * @return 频道名称或队列名称
     */
    public String getCurrentMessageTarget() {
        return isPubSubMode() ? messageChannel : messageQueue;
    }
} 